/*
 * Copyright (c) 2013-2018 上海汇数数据. All rights reserved.
 * @(#) CipherParams.java 2018-08-06 17:26
 */

package cn.jh.common.core.crypto;

import org.jetbrains.annotations.Nullable;

import java.security.SecureRandom;


/**
 * @author Fuchun
 * @since 1.0
 */
public abstract class CipherParams {

    /** {@code Cipher} 的转换信息。例如：{@code AES/CBC/PKCS5Padding} */
    public abstract Transformation getTransformation();

    public String getAlgorithm() {
        return getTransformation().getAlgorithm();
    }

    public OprMode getMode() {
        return getTransformation().getMode();
    }

    public PaddingSchema getPadding() {
        return getTransformation().getPadding();
    }

    /** {@code Cipher} 实现的提供者名称。默认：{@code SunJCE} */
    public abstract String getProvider();

    /** 密钥大小（bit）。*/
    public abstract int getKeySize();

    /** 强加密随机数生成器(PNG) */
    @Nullable
    public abstract SecureRandom getSecureRandom();

    /**
     * 用于在流操作期间将数据从一个流传输到另一个流的内部缓冲区的大小（以字节为单位）
     */
    public abstract int getStreamingBufferSize();
}
